package 富婆梦.第一阶段.Java基础视频学习.Scoket知识点.UDP接受键盘输入;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.Scoket练习
 * @ClassName: UDPSend
 * @Author: hemengjin
 * @Description: UDP协议发送数据
 * 实现UDP协议的发送端:
 * 实现封装数据的类 java.net.DatagramPacket  将你的数据包装
 * 实现数据传输的类 java.net.DatagramSocket  将数据包发出去
 * <p>
 * 实现步骤:
 * 1. 创建DatagramPacket对象,封装数据, 接收的地址和端口
 * 2. 创建DatagramSocket
 * 3. 调用DatagramSocket类方法send,发送数据包
 * 4. 关闭资源
 * <p>
 * DatagramPacket构造方法:
 * DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 * <p>
 * DatagramSocket构造方法:
 * DatagramSocket()空参数
 * 方法: send(DatagramPacket d)
 * @Date:2021/11/10 14:37
 * @Version: 1.0
 */
public class UDPSend {
    public static void main(String[] args) throws IOException {
        //创建InetAddress对象，封装自己的IP地址
        InetAddress inet = InetAddress.getByName("192.168.50.30");

        //创建DatagramSocket对象,数据包的发送和接收对象
        DatagramSocket ds = new DatagramSocket();

        Scanner sc = new Scanner(System.in);
        //一直监听键盘输入
        while (true) {
            String message = sc.nextLine();
            //创建数据包对象
            byte[] data =message.getBytes();

            //封装要发送的数据包：数据内容+发送方的IP地址
            //构造函数：DatagramPacket(byte[] buf, int length, InetAddress address, int port) :
            //构造传参为：数据内容，数据长度,封装IP的InetAddress对象，约定的端口号（接收端必须和发送端填一样的）
            DatagramPacket dp = new DatagramPacket(data, data.length, inet, 6000);

            //发送数据包，关闭资源
            ds.send(dp);
        }
    }
}
